棒球記錄方法說明,
其精神是一球入魂,白話講解,是一球的生命歷程,從出生,到結束。
因為是日誌式的記錄,所以如何定義一球,這是按不同的人,設計系統,
會有不同的概念,甚至紙本記錄法,就不見得是這種記法,記重點事件發生的上下局,
因為是關聯式資料庫,所以重視各資料表間的關聯。
所謂記錄的一球,意指投手投出的一球,直到下一球投出前。
然後,以這一球做為關聯的key,串起所有發生的事件。
舉例來說,投手投出一球,假設這球的id是13,這個id就一直用於各事件的記錄。
例如,投出偏內角的球,打者打出左外壘安打,落地後被外壘手接到,傳往一壘,打者於跑向一壘時,
被剌殺於一壘,這以這顆id是13的球,產生了,投球記錄(record)一筆,打擊揮棒記錄,傳球記錄,
跑壘記錄,
狀況一:投手接球後,並不投球,而是牽制壘上的跑者,這時,球的id仍是13,並沒有加1,只有
投給打者打的球,才是一球,這也有所謂的投手用球數的問題,拿來練投,牽制的投球,
並不計入用球數。或是活球,死球的概念,以快速壘球而言,盜壘必須等投手投出才能開盜,
和棒球不一樣,棒球的壘上跑者,可以不斷離壘來干擾投手,或是伺機盜壘。
**狀況二:**補手接球後,牽制,也算在同一球內。
狀況三:更換選手時,仍算在同一球內。雖然這時沒有球的移動。同理,暫停,五局休息(壘球只打
7局,無中場休息,且常常是限時比賽,5,6局結束也有),感覺是獨立的事件,皆計入同一球。
這種規格,不是筆者制定的,第一個訂定的人,不知是誰,筆者決定這樣設計也不錯。
以這樣的概念,就借用laravel 開一下table。
Schema::create('balls', function (Blueprint $table) {
$table->increments('id');
$table->integer('match_id');
$table->integer('ball_id'); //目前進行的球,編號
$table->string('inning'); //目前的局,分一上/一下,二上/二下…九上/九下
$table->integer('inning_ball_id')->nullable(); //每局用球,新局開始時歸0
$table->timestamps();
});
Schema::create('pitchers', function (Blueprint $table) { //投球記錄
$table->increments('id');
$table->integer('gid'); //替代 ball_id + matchid
$table->string('pitcher'); //投手
$table->string('strike'); //1好,2好,
$table->string('position'); //九宮格
$table->integer('x')->nullable(); //x座標
$table->integer('y')->nullable(); //y座標
$table->string('kind'); //曲球,伸卡球,直球
$table->string('velocity'); //速度,快,中,慢
$table->integer('speed')->nullable(); //球速
$table->string('condition');
$table->string('result');
$table->timestamps();
});
Schema::create('hitters', function (Blueprint $table) { //打擊記錄
$table->increments('id');
$table->integer('gid'); //替代 ball_id + matchid
$table->string('hitter');
$table->string('result');
$table->string('track');
$table->integer('x')->nullable();
$table->integer('y')->nullable();
$table->string('position');
$table->integer('hitpoint')->nullable();
$table->string('memo')->nullable(); //界外(本壘後),右方,左方,揮空,擦棒,不揮,
$table->timestamps();
});
Schema::create('fielders', function (Blueprint $table) { //接球及傳球記錄
$table->increments('id');
$table->integer('gid'); //替代 ball_id + matchid
$table->string('passball'); //牽制 傳球
$table->string('from'); // 傳出 牽制 傳球
$table->string('from_player'); //牽制 傳球
$table->string('to'); // 接球 牽制 傳球
$table->string('to_player'); //牽制 傳球
$table->string('error');
$table->string('result'); //失誤,漏接,先判斷第一接球者是
$table->string('memo');
$table->timestamps();
});
Schema::create('runners', function (Blueprint $table) { //跑壘球錄
$table->increments('id');
$table->integer('gid'); //替代 ball_id + matchid
$table->string('runner');
$table->string('from'); //一,二,三,本
$table->string('to'); //一,二,三,本
$table->integer('score'); //誰跑回來得分 盜壘
$table->string('result');
$table->string('error');
$table->string('memo');
$table->timestamps();
});